package leetcode.year2021.month12;

import java.util.ArrayList;
import java.util.List;

//22. 括号生成
public class _04_4GenerateParenthesis22 {
  /**
   * 思路： 使用回溯，记住左边的括号剩余数，不能比右边括号剩余数高
   */
  public List<String> result = new ArrayList<>();
  public StringBuffer sb = new StringBuffer();
  public List<String> generateParenthesis(int n) {
    dfs(n,n);
    return result;
  }

  private void dfs(int left, int right) {
    if (left == 0 && right == 0){
      result.add(sb.toString());
    }
    if (left > 0){
      sb.append("(");
      dfs(left- 1,right);
      sb.deleteCharAt(sb.length()-1);
    }
    if (right > left){
      sb.append(")");
      dfs(left,right-1);
      sb.deleteCharAt(sb.length()-1);
    }
  }
  /**
   * 22. 括号生成
   * 数字 n 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。
   *
   *
   *
   * 示例 1：
   *
   * 输入：n = 3
   * 输出：["((()))","(()())","(())()","()(())","()()()"]
   * 示例 2：
   *
   * 输入：n = 1
   * 输出：["()"]
   *
   *
   * 提示：
   *
   * 1 <= n <= 8
   */
}
